// 代码题：


//练习1：使用fp.add(x,y)和fp.map(f,x)创建一个让functor里的值增加的函数ex1

// app.js
const fp = require('lodash/fp')
const { Maybe,Container} = require('./support')
let maybe = Maybe.of([5,6,1])
// 练习1解答：
let ex1 = ()=>{
    let sum = 0;
    fp.map(function(item){
        sum = fp.add(sum,item)
    },maybe._value)
    return sum
}
// console.log(ex1()) 

//练习2：实现一个函数ex2，能够使用fp.first获取列表的第一个元素
let xs = Container.of([
    'do','ray','me','fa','so','la','ti','do'
]);
// console.log(xs._value)
// 练习2解答
let ex2 = ()=>{
    return fp.first(xs._value)
}
// console.log(ex2()) 

// 练习3，实现一个函数ex3，使用safeProp 和 fp.first 找到user的名字和首字母
let safeProp = fp.curry(function(x,o){
    return Maybe.of(o[x])
})
let user = {
    id:2,
    name:'Albert'
}
// console.log(safeProp('name',user))
// 练习3解答：
let ex3 =()=>{
    let name = safeProp('name',user)._value;
    let firstWord = fp.first(name);
    return [name,firstWord]
}
// console.log(ex3())

// 练习4：使用Maybe 重写ex4，不要有if语句
let ex4 = function(n){
    if(n){
        return parseInt(n)
    }
}
// console.log(ex4('in'))
// 练习4解答
let ex5= (n)=>{
    return parseInt(Maybe.of(n)._value)
}
// console.log(ex5('8'))